//
//  Problem434.swift
//  TestProject
//
//  Created by 毕武侠 on 2021/3/27.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 434. 字符串中的单词数 【字符计算】
 统计字符串中的单词个数，这里的单词指的是连续的不是空格的字符。

 请注意，你可以假定字符串里不包括任何不可打印的字符。

 示例:

 输入: "Hello, my name is John"
 输出: 5
 解释: 这里的单词是指连续的不是空格的字符，所以 "Hello," 算作 1 个单词。

 */
@objcMembers class Problem434: NSObject {
    func solution() {
        print(countSegmentsFor(""))
        print(countSegmentsFor("    "))
        print(countSegmentsFor("  a  "))
        print(countSegmentsFor("  a b "))
        print(countSegmentsFor("a b"))
        print(countSegmentsFor("a "))
        print(countSegmentsFor("a"))
        print(countSegmentsFor(" a"))
        print(countSegmentsFor("Hello, my name is John"))
    }
    
    /*
     按照空格进行切分
     */
    func countSegments(_ s: String) -> Int {
        return s.split(separator: " ").count
    }
    
    /*
     遍历字符串，寻找空格的个数
     1: 创建一个字符lastC 用来记录上一个字符 = nil
     2: 遍历字符串，当c == " "时：
        2.1 当last = nil时 是这样的情况"    a", 这时是第一个" "不能+1
        2.2 当lastC == " "时 是这样的情况"    a", 这时是第二个" "不能+1
        2.3 其他情况都可以+1
     3: 遍历完后，判断最后一段字符是否是"   "，这种情况不能+1
     */
    func countSegmentsFor(_ s: String) -> Int {
        var lastC: Character? = nil
        var result = 0
        for c in s {
            if c == " " {
                if lastC != nil && lastC != " " {
                    result += 1
                }
            }
            lastC = c
        }
        if lastC != nil && lastC != " " {
            result += 1
        }
        return result
    }
}
